
// 调试模块
App.debug = {
    // 模拟收到新邮件通知
    sendTestNotification: function(accountId = 1, folder = 'INBOX', count = 2) {
        if (!App.ws || App.ws.readyState !== WebSocket.OPEN) {
            console.error('调试失败：WebSocket 未连接。');
            layui.layer.msg('调试失败：WebSocket 未连接。', { icon: 2 });
            return;
        }

        console.log(`%c[调试] 模拟收到新邮件通知...`, 'color: #3a8ee6; font-weight: bold;');
        console.log(`%c  - Account ID: ${accountId}`, 'color: #3a8ee6;');
        console.log(`%c  - Folder: ${folder}`, 'color: #3a8ee6;');
        console.log(`%c  - Count: ${count}`, 'color: #3a8ee6;');

        const mockData = {
            status: 'new_mail',
            accountId: accountId,
            folder: folder,
            count: count
        };

        const mockEvent = new MessageEvent('message', {
            data: JSON.stringify(mockData)
        });

        try {
            App.ws.onmessage(mockEvent);
            if (window.Notification && Notification.permission === 'default') {
                console.warn('[调试] 如果浏览器弹出权限请求，请点击“允许”以接收通知。');
            }
        } catch (error) {
            console.error('[调试] 发送测试通知时发生错误：', error);
            layui.layer.msg('测试通知发送失败', { icon: 2 });
        }
    },

    // 模拟同步成功通知
    sendSyncSuccessNotification: function(accountId = 1, newMailCount = 3) {
        if (!App.ws || App.ws.readyState !== WebSocket.OPEN) {
            console.error('调试失败：WebSocket 未连接。');
            layui.layer.msg('调试失败：WebSocket 未连接。', { icon: 2 });
            return;
        }

        console.log(`%c[调试] 模拟同步成功通知...`, 'color: #67c23a; font-weight: bold;');
        console.log(`%c  - Account ID: ${accountId}`, 'color: #67c23a;');
        console.log(`%c  - New Mail Count: ${newMailCount}`, 'color: #67c23a;');

        const mockData = {
            status: 'sync_success',
            accountId: accountId,
            newMailCount: newMailCount
        };

        const mockEvent = new MessageEvent('message', {
            data: JSON.stringify(mockData)
        });

        try {
            App.ws.onmessage(mockEvent);
            if (window.Notification && Notification.permission === "default") {
                console.warn('[调试] 如果浏览器弹出权限请求，请点击"允许"以接收通知。');
            }
        } catch (error) {
            console.error('[调试] 发送同步成功通知时发生错误：', error);
            layui.layer.msg('测试通知发送失败', { icon: 2 });
        }
    }
};


// 自定义 console.log 函数，用于完整显示对象内容，去除省略号，并添加时间戳
(function() {
    // 保存原始的 console.log 方法
    const originalLog = console.log;

    // 获取当前时间并格式化为 【mm-dd HH:ii:ss】 格式
    function getFormattedTime() {
        const now = new Date();
        const month = String(now.getMonth() + 1).padStart(2, '0'); // 月份从0开始，需要+1
        const day = String(now.getDate()).padStart(2, '0');
        const hours = String(now.getHours()).padStart(2, '0');
        const minutes = String(now.getMinutes()).padStart(2, '0');
        const seconds = String(now.getSeconds()).padStart(2, '0');
        
        return `[${month}-${day} ${hours}:${minutes}:${seconds}]`;
    }

    // 重写 console.log 方法
    console.log = function(...args) {
        // 获取时间戳
        const timestamp = getFormattedTime();
        
        const processedArgs = args.map(arg => {
            // 如果是对象或数组，使用 JSON.stringify 完整显示为一行
            if (typeof arg === 'object' && arg !== null) {
                try {
                    // 使用 WeakSet 追踪已访问的对象，正确处理循环引用
                    const seen = new WeakSet();
                    return JSON.stringify(arg, (key, value) => {
                        // 处理循环引用
                        if (typeof value === 'object' && value !== null) {
                            if (seen.has(value)) {
                                return '[Circular]';
                            }
                            seen.add(value);
                        }
                        return value;
                    });
                } catch (error) {
                    // 如果 JSON.stringify 失败，回退到原始值
                    return arg;
                }
            }
            // 对于非对象类型，直接返回原值
            return arg;
        });

        // 在参数数组前面添加时间戳
        const finalArgs = [timestamp, ...processedArgs];
        
        // 调用原始的 console.log 方法
        originalLog.apply(console, finalArgs);
    };
})();